<?php
namespace app\common\service;

use think\Service;

class ModuleService extends Service
{
    public function register()
    {
        $this->app->bind('file_system');
        // dump($this->scanModules(root_path().'app'));
    }


    /**
     * 扫描应用目录，收集所有模块的信息
     * @param string $appDir 应用目录路径
     * @return array 模块信息的关联数组
     */
    function scanModules(string $appDir = __DIR__ . '/app'): array
    {
        $modules = [];

        // 检查目录是否存在
        if (!is_dir($appDir)) {
            return $modules;
        }

        // 获取所有子目录
        $dirs = glob($appDir . '/*', GLOB_ONLYDIR);

        foreach ($dirs as $dir) {
            $moduleName = basename($dir);
            $infoFile = $dir . '/info.php';

            // 检查info.php文件是否存在
            if (file_exists($infoFile)) {
                try {
                    // 引入文件并获取返回的数组
                    $moduleInfo = require $infoFile;

                    // 验证必需的字段
                    if (
                        is_array($moduleInfo) &&
                        isset($moduleInfo['name']) &&
                        isset($moduleInfo['title']) &&
                        isset($moduleInfo['identifier']) &&
                        isset($moduleInfo['author']) &&
                        isset($moduleInfo['version'])
                    ) {

                        // 确保模块名匹配目录名
                        if ($moduleInfo['name'] === $moduleName) {
                            $modules[$moduleName] = $moduleInfo;
                        } else {
                            trigger_error("模块名与目录名不匹配: {$moduleName}", E_USER_WARNING);
                        }
                    } else {
                        trigger_error("模块 {$moduleName} 的info.php格式不正确", E_USER_WARNING);
                    }
                } catch (\Exception $e) {
                    trigger_error("读取模块 {$moduleName} 信息时出错: {$e->getMessage()}", E_USER_WARNING);
                }
            }
        }

        return $modules;
    }
}